//
//  XMGTextField.m
//  01-百思不得姐
//
//  Created by xiaomage on 15/7/26.
//  Copyright (c) 2015年 小码哥. All rights reserved.
//

#import "XMGTextField.h"
#import <objc/runtime.h>

static NSString * const XMGPlacerholderColorKeyPath = @"_placeholderLabel.textColor";

@implementation XMGTextField

#pragma mark - 0 运行时方法 修改placeholder颜色
+ (void)getProperties
{
    unsigned int count = 0;
    
    /**这是获取属性*/
    objc_property_t *properties = class_copyPropertyList([UITextField class], &count);//拿到累的所有成员变量  是数组
    
    for (int i = 0; i<count; i++) {
        // 取出属性
        objc_property_t property = properties[i];//取出属性 如果指针指向数组的首元素 那么他可以像数组一样去访问元素
        /**数组名是指向数组首元素的指针 所以指针可以当数组名字来用*/
        
        // 打印属性名字  property_getAttributes获得属性的类型
        HXLog(@"%s   <---->   %s", property_getName(property), property_getAttributes(property));//打印名字
    }
    
    free(properties);//释放拷贝的内存
    
    /**这是获取成员变量  也可以获取方法*/
//    Ivar *ivars = class_copyIvarList([UITextField class], &count);
//    for (int i = 0; i<count; i++) {
//        Ivar ivar = *(ivars + i);//指针也可以这么访问
//        XMGLog(@"%s %s", ivar_getName(ivar), ivar_getTypeEncoding(ivar));//名字和类型
//    }
//    free(ivars);//释放拷贝的内存
}

- (void)awakeFromNib
{
    // 设置光标颜色和文字颜色一致
    self.tintColor = self.textColor;
    
    // 不成为第一响应者
    [self resignFirstResponder];
}

/**
 * 当前文本框聚焦时就会调用
 */
- (BOOL)becomeFirstResponder
{
    // 修改占位文字颜色
    [self setValue:self.textColor forKeyPath:XMGPlacerholderColorKeyPath];
    return [super becomeFirstResponder];
}

/**
 * 当前文本框失去焦点时就会调用
 */
- (BOOL)resignFirstResponder
{
    // 修改占位文字颜色
    [self setValue:[UIColor grayColor] forKeyPath:XMGPlacerholderColorKeyPath];
    return [super resignFirstResponder];
}

//成为高亮的时候 调用的方法  可以在这列做一些事情 比如让站位文字颜色改变  但是没有提供失去高亮的时候的方法  所以无法一一对应
- (void)setHighlighted:(BOOL)highlighted
{
    [super setHighlighted:highlighted];
    //
}
/**
 运行时(Runtime): 
 * 苹果官方一套C语言库
 * 能做很多底层操作(比如访问隐藏的一些成员变量\成员方法....)
 */

#pragma mark - 1 官方提供的画Placeholder的方法 修改placeholder颜色
//- (void)drawPlaceholderInRect:(CGRect)rect
//{
//    [self.placeholder drawInRect:CGRectMake(0, 10, rect.size.width, 25) withAttributes:@{
//                                                                                         NSForegroundColorAttributeName : [UIColor grayColor],
//                                                                                         NSFontAttributeName : self.font}];
//}



#pragma mark - 2 attributedPlaceholder设置属性文字 来修改Placeholder颜色
-(void)setUp{
    // 文字属性
    NSMutableDictionary *attrs = [NSMutableDictionary dictionary];
    attrs[NSForegroundColorAttributeName] = [UIColor grayColor];
    
    // NSAttributedString : 带有属性的文字(富文本技术)
    NSAttributedString *placeholder = [[NSAttributedString alloc] initWithString:@"手机号" attributes:attrs];
    self.attributedPlaceholder = placeholder;
    
    //    NSMutableAttributedString *placehoder = [[NSMutableAttributedString alloc] initWithString:@"手机号"];
    //    [placehoder setAttributes:@{NSForegroundColorAttributeName : [UIColor whiteColor]} range:NSMakeRange(0, 1)];
    //    [placehoder setAttributes:@{
    //                                NSForegroundColorAttributeName : [UIColor yellowColor],
    //                                NSFontAttributeName : [UIFont systemFontOfSize:30]
    //                                } range:NSMakeRange(1, 1)];
    //    [placehoder setAttributes:@{NSForegroundColorAttributeName : [UIColor redColor]} range:NSMakeRange(2, 1)];
    //    self.phoneField.attributedPlaceholder = placehoder;
}
@end
